/*******************************************************************************
 * Classe charger : classe de gestion du chargement des parties enregistrées
 ******************************************************************************/
package tp2;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

/**
 *
 * @author W&G
 */
public class Charger extends JPanel {
    // Lien vers la fenêtre
    private Fenetre fenetre;
    // Titre
    private JLabel lblTitre = new JLabel("Charger");
    // Message sur le chargement
    private JLabel lblMessage = new JLabel("");
    // Bouton retour
    private JButton btnRetour = new JButton("Retour");
    // Panneau conteneur
    private JPanel pnlConteneur = new JPanel();
    // Panneau principal
    private JPanel pnlPrincipal = new JPanel(new GridLayout(14, 1));
    // Panneau qui contient le message sur le chargement
    private JPanel pnlMessage = new JPanel();
    // Boutons des slots de sauvegarde
    private JButton btnSlot1 = new JButton("Slot 1");
    private JButton btnSlot2 = new JButton("Slot 2");
    private JButton btnSlot3 = new JButton("Slot 3");
    private JButton btnSlot4 = new JButton("Slot 4");
    private JButton btnSlot5 = new JButton("Slot 5");
    private JButton btnSlot6 = new JButton("Slot 6");
    private JButton btnSlot7 = new JButton("Slot 7");
    private JButton btnSlot8 = new JButton("Slot 8");
    private JButton btnSlot9 = new JButton("Slot 9");
    private JButton btnSlot10 = new JButton("Slot 10");
    // True si le menu renvoie au jeu, false si le menu renvoie au menu
    private boolean retour = false;

    public Charger(Fenetre fenetre) {
        this.fenetre = fenetre;
        // Ajoute les éléments du menu
        ajouterElements();
    }

    private void ajouterElements() {
        // Couleurs, alignement
        lblTitre.setForeground(Color.CYAN);
        lblTitre.setHorizontalAlignment(SwingConstants.CENTER);
        lblMessage.setForeground(Color.RED);
        pnlConteneur.setBackground(fenetre.getFond());
        pnlPrincipal.setBackground(fenetre.getFond());
        pnlMessage.setBackground(fenetre.getFond());

        // Taille du panneau
        pnlPrincipal.setPreferredSize(new Dimension(173, 374));

        // Ajout des boutons et labels
        pnlPrincipal.add(lblTitre);
        pnlPrincipal.add(btnSlot1);
        pnlPrincipal.add(btnSlot2);
        pnlPrincipal.add(btnSlot3);
        pnlPrincipal.add(btnSlot4);
        pnlPrincipal.add(btnSlot5);
        pnlPrincipal.add(btnSlot6);
        pnlPrincipal.add(btnSlot7);
        pnlPrincipal.add(btnSlot8);
        pnlPrincipal.add(btnSlot9);
        pnlPrincipal.add(btnSlot10);
        pnlPrincipal.add(new JLabel());
        pnlPrincipal.add(btnRetour);

        pnlMessage.add(lblMessage);

        pnlPrincipal.add(pnlMessage);
        pnlConteneur.add(pnlPrincipal);

        this.add(pnlConteneur);

        // ActionListeners
        btnSlot1.addActionListener(new BoutonPresse());
        btnSlot2.addActionListener(new BoutonPresse());
        btnSlot3.addActionListener(new BoutonPresse());
        btnSlot4.addActionListener(new BoutonPresse());
        btnSlot5.addActionListener(new BoutonPresse());
        btnSlot6.addActionListener(new BoutonPresse());
        btnSlot7.addActionListener(new BoutonPresse());
        btnSlot8.addActionListener(new BoutonPresse());
        btnSlot9.addActionListener(new BoutonPresse());
        btnSlot10.addActionListener(new BoutonPresse());
        btnRetour.addActionListener(new BoutonPresse());
    }
    //charge la partie selon le slot selectionné
    private boolean charger(JButton slot) {
        boolean correct = false;
        String lecture = "";
        String[] split;
        try {
            BufferedReader fr = new BufferedReader(new FileReader(slot.getText() + ".txt"));
            split = fr.readLine().split(";");
            for (int i = 0; i < Jeu.getCases().length; i++) {
                for (int j = 0; j < Jeu.getCases()[i].length; j++) {
                    lecture = split[Jeu.getCases().length * i + j];
                    Jeu.getCases()[i][j].chargerPions(Case.Etat.valueOf(lecture));
                }
            }
            Case.setJoueurCourant(Jeu.Joueur.valueOf(split[64]));
            Case.setSuperReddDejaJoue1(Boolean.parseBoolean(split[65]));
            Case.setSuperReddDejaJoue2(Boolean.parseBoolean(split[66]));
            fr.close();
            Case.chargerLabels();
            correct = true;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            lblMessage.setText("Erreur lors du chargement.");
        }
        return correct;
    }
//Retourne la variable du bouton retour
    public void setRetour(boolean retour) {
        this.retour = retour;
    }
//Classe de gestion des événements
    class BoutonPresse implements ActionListener {

        public void actionPerformed(ActionEvent ae) {
            if (ae.getSource() == btnRetour) {
                lblMessage.setText("");
                if (retour) {
                    fenetre.afficherJeu();
                } else {
                    fenetre.afficherMenuPrincipal();
                }
            } else {
                if (charger((JButton) ae.getSource())) {
                    fenetre.afficherJeu();
                }
            }
        }
    }
}
